package com.hotel.vo;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 房间类型视图对象
 */
public class RoomTypeVO {
    
    private Long id;
    
    private String name;
    
    private String code;
    
    private BigDecimal basePrice;
    
    private BigDecimal area;
    
    private Integer maxOccupancy;
    
    private Integer bedCount;
    
    private String bedType;
    
    private String description;
    
    private String facilities;
    
    private String services;
    
    private String imageUrl;
    
    private String status;
    
    private String statusName;
    
    private Integer sortOrder;
    
    private String remarks;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    // 扩展字段
    private Integer totalRooms;
    
    private Integer availableRooms;
    
    private Integer occupiedRooms;
    
    private Integer cleaningRooms;
    
    private Integer maintenanceRooms;
    
    private Integer outOfOrderRooms;
    
    private BigDecimal occupancyRate;
    
    private BigDecimal totalRevenue;
    
    private BigDecimal avgDailyRate;
    
    private Integer totalReservations;
    
    private BigDecimal avgRating;
    
    private Integer reviewCount;
    
    // 构造函数
    public RoomTypeVO() {}
    
    // Getter和Setter方法
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getCode() {
        return code;
    }
    
    public void setCode(String code) {
        this.code = code;
    }
    
    public BigDecimal getBasePrice() {
        return basePrice;
    }
    
    public void setBasePrice(BigDecimal basePrice) {
        this.basePrice = basePrice;
    }
    
    public BigDecimal getArea() {
        return area;
    }
    
    public void setArea(BigDecimal area) {
        this.area = area;
    }
    
    public Integer getMaxOccupancy() {
        return maxOccupancy;
    }
    
    public void setMaxOccupancy(Integer maxOccupancy) {
        this.maxOccupancy = maxOccupancy;
    }
    
    public Integer getBedCount() {
        return bedCount;
    }
    
    public void setBedCount(Integer bedCount) {
        this.bedCount = bedCount;
    }
    
    public String getBedType() {
        return bedType;
    }
    
    public void setBedType(String bedType) {
        this.bedType = bedType;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    public String getFacilities() {
        return facilities;
    }
    
    public void setFacilities(String facilities) {
        this.facilities = facilities;
    }
    
    public String getServices() {
        return services;
    }
    
    public void setServices(String services) {
        this.services = services;
    }
    
    public String getImageUrl() {
        return imageUrl;
    }
    
    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }
    
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    
    public String getStatusName() {
        return statusName;
    }
    
    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }
    
    public Integer getSortOrder() {
        return sortOrder;
    }
    
    public void setSortOrder(Integer sortOrder) {
        this.sortOrder = sortOrder;
    }
    
    public String getRemarks() {
        return remarks;
    }
    
    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }
    
    public LocalDateTime getCreateTime() {
        return createTime;
    }
    
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
    
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }
    
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
    
    public Integer getTotalRooms() {
        return totalRooms;
    }
    
    public void setTotalRooms(Integer totalRooms) {
        this.totalRooms = totalRooms;
    }
    
    public Integer getAvailableRooms() {
        return availableRooms;
    }
    
    public void setAvailableRooms(Integer availableRooms) {
        this.availableRooms = availableRooms;
    }
    
    public Integer getOccupiedRooms() {
        return occupiedRooms;
    }
    
    public void setOccupiedRooms(Integer occupiedRooms) {
        this.occupiedRooms = occupiedRooms;
    }
    
    public Integer getCleaningRooms() {
        return cleaningRooms;
    }
    
    public void setCleaningRooms(Integer cleaningRooms) {
        this.cleaningRooms = cleaningRooms;
    }
    
    public Integer getMaintenanceRooms() {
        return maintenanceRooms;
    }
    
    public void setMaintenanceRooms(Integer maintenanceRooms) {
        this.maintenanceRooms = maintenanceRooms;
    }
    
    public Integer getOutOfOrderRooms() {
        return outOfOrderRooms;
    }
    
    public void setOutOfOrderRooms(Integer outOfOrderRooms) {
        this.outOfOrderRooms = outOfOrderRooms;
    }
    
    public BigDecimal getOccupancyRate() {
        return occupancyRate;
    }
    
    public void setOccupancyRate(BigDecimal occupancyRate) {
        this.occupancyRate = occupancyRate;
    }
    
    public BigDecimal getTotalRevenue() {
        return totalRevenue;
    }
    
    public void setTotalRevenue(BigDecimal totalRevenue) {
        this.totalRevenue = totalRevenue;
    }
    
    public BigDecimal getAvgDailyRate() {
        return avgDailyRate;
    }
    
    public void setAvgDailyRate(BigDecimal avgDailyRate) {
        this.avgDailyRate = avgDailyRate;
    }
    
    public Integer getTotalReservations() {
        return totalReservations;
    }
    
    public void setTotalReservations(Integer totalReservations) {
        this.totalReservations = totalReservations;
    }
    
    public BigDecimal getAvgRating() {
        return avgRating;
    }
    
    public void setAvgRating(BigDecimal avgRating) {
        this.avgRating = avgRating;
    }
    
    public Integer getReviewCount() {
        return reviewCount;
    }
    
    public void setReviewCount(Integer reviewCount) {
        this.reviewCount = reviewCount;
    }
    
    @Override
    public String toString() {
        return "RoomTypeVO{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", code='" + code + '\'' +
                ", basePrice=" + basePrice +
                ", area=" + area +
                ", maxOccupancy=" + maxOccupancy +
                ", bedCount=" + bedCount +
                ", bedType='" + bedType + '\'' +
                ", description='" + description + '\'' +
                ", facilities='" + facilities + '\'' +
                ", services='" + services + '\'' +
                ", imageUrl='" + imageUrl + '\'' +
                ", status='" + status + '\'' +
                ", statusName='" + statusName + '\'' +
                ", sortOrder=" + sortOrder +
                ", remarks='" + remarks + '\'' +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                ", totalRooms=" + totalRooms +
                ", availableRooms=" + availableRooms +
                ", occupiedRooms=" + occupiedRooms +
                ", cleaningRooms=" + cleaningRooms +
                ", maintenanceRooms=" + maintenanceRooms +
                ", outOfOrderRooms=" + outOfOrderRooms +
                ", occupancyRate=" + occupancyRate +
                ", totalRevenue=" + totalRevenue +
                ", avgDailyRate=" + avgDailyRate +
                ", totalReservations=" + totalReservations +
                ", avgRating=" + avgRating +
                ", reviewCount=" + reviewCount +
                '}';
    }
}